package com.zyx.mybatisdemo.dao;

import com.zyx.mybatisdemo.entity.Emp;
import com.zyx.mybatisdemo.entity.User;
import org.apache.ibatis.annotations.MapKey;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * @author Yaxi.Zhang
 * @since 2021/8/30 10:03
 */
public interface UserDao {
    /**
     * 保存用户
     *
     * @param user 需要保存的用户
     * @return 保存用户的条数
     */
    int save(User user);

    /**
     * 更新方法
     *
     * @param user 传入的user变量
     * @return 更新的条数
     */
    int update(User user);

    /**
     * 删除方法
     *
     * @param id 需要删除的用户id
     * @return 删除的条数
     */
    int delete(Integer id);

    /**
     * 查询所有
     *
     * @return 查询结果列表
     */
    List<User> queryAll();

    /**
     * 根据id查询一个用户
     *
     * @param id 查询的用户id
     * @return 查询到的用户结果信息
     */
    User queryById(Integer id);

    /**
     * 依据id查询用户的map
     * @param id 用户id
     * @return 用户map, 列的名称作为key, 列的值作为value
     */
    Map<Object, Object> queryByIdReturnMap(Integer id);

    /**
     * 依据id查询用户的map
     * @param id 员工id
     * @return 用户map, id(MapKey注解指定)作为key, pojo作为value
     */
    @MapKey("id")
    Map<Integer, Emp> queryByIdReturnKeyMap(Integer id);

    /**
     * 根据姓名模糊查询
     *
     * @param name 模糊查询含有的字符串
     * @return 模糊查询的结果
     */
    List<User> queryLikeByName(String name);

    /**
     * 分页查询
     *
     * @param start 开始查询的行数
     * @param rows  需要查询的总行数
     * @return 分页查询结果
     */
    List<User> queryByPage(@Param("start") Integer start, @Param("rows") Integer rows);

    /**
     * 查询表中总行数
     * @return 表中的总行数
     */
    Long queryTotalCounts();
}
